package com.ruoyi.customer.service.impl;

import com.ruoyi.common.annotation.DataScope;
import com.ruoyi.customer.domain.CustomerStatic;
import com.ruoyi.customer.mapper.CustomerStaticMapper;
import com.ruoyi.customer.service.ICustomerStaticService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.validation.Validator;
import java.math.BigDecimal;
import java.util.List;

/**
 * 用户统计 业务层处理
 * 
 * @author ruoyi
 */
@Service
public class CustomerStaticServiceImpl implements ICustomerStaticService
{

    @Autowired
    private CustomerStaticMapper userMapper;

    @Autowired
    protected Validator validator;

    /**
     * 根据条件分页查询用户统计列表
     * 
     * @param user 用户统计信息
     * @return 用户统计信息集合信息
     */
    @Override
    @DataScope(deptAlias = "d", userAlias = "u")
    public List<CustomerStatic> selectUserList(CustomerStatic user)
    {
        return userMapper.selectUserList(user);
    }

    /**
     * 通过用户统计ID查询用户统计
     * 
     * @param userId 用户统计ID
     * @return 用户统计对象信息
     */
    @Override
    public CustomerStatic selectUserById(Long userId)
    {
        return userMapper.selectUserById(userId);
    }

    /**
     * 新增保存用户统计信息
     * 
     * @param user 用户统计信息
     * @return 结果
     */
    @Override
    @Transactional
    public int insertUser(CustomerStatic user)
    {
        // 新增用户统计信息
        int rows = userMapper.insertUser(user);
        return rows;
    }

    /**
     * 修改保存用户统计信息
     * 
     * @param user 用户统计信息
     * @return 结果
     */
    @Override
    @Transactional
    public int updateUser(CustomerStatic user)
    {
        return userMapper.updateUser(user);
    }

    /**
     * 修改保存用户统计信息 - 赠送礼物
     *
     * @param userId 用户统计信息
     * @return 结果
     */
    @Override
    @Transactional
    public int updateUserGift(Long userId, BigDecimal amount)
    {
        CustomerStatic user = userMapper.selectUserById(userId);
        user.setRewardAmount(user.getOrderAmount().add(amount));
        user.setRewardCount(user.getRewardCount() + 1);
        return userMapper.updateUser(user);
    }

    /**
     * 修改保存用户统计信息 - 充值
     *
     * @param userId 用户统计信息
     * @return 结果
     */
    @Override
    @Transactional
    public int updateUserRecharge(Long userId, BigDecimal amount)
    {
        CustomerStatic user = userMapper.selectUserById(userId);
        user.setRechargeAmount(user.getRechargeAmount().add(amount));
        user.setRechargeCount(user.getRechargeCount() + 1);
        return userMapper.updateUser(user);
    }

    /**
     * 修改保存用户统计信息 - 下单
     *
     * @param userId 用户统计信息
     * @return 结果
     */
    @Override
    @Transactional
    public int updateUserOrder(Long userId, BigDecimal amount)
    {
        CustomerStatic user = userMapper.selectUserById(userId);
        user.setOrderAmount(user.getOrderAmount().add(amount));
        user.setOrderCount(user.getOrderCount() + 1);
        return userMapper.updateUser(user);
    }
}
